﻿/*
 * Creado por SharpDevelop.
 * Usuario: Pavilion
 * Fecha: 22/10/2011
 * Hora: 10:26 p.m.
 * 
 * Para cambiar esta plantilla use Herramientas | Opciones | Codificación | Editar Encabezados Estándar
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using Negocio;
using Excepciones;

namespace Clase2
{
	public partial class AltaDeTipoDeInfraccion : Form
	{
		List<String> tipoInfracciones;
		List<Infraccion> infracciones;
		private Infraccion seleccionado;
		
		public AltaDeTipoDeInfraccion(List<Infraccion> infracciones)
		{
			InitializeComponent();
			this.infracciones = infracciones;
			this.tipoInfracciones = this.tiposDeInfracciones();
			this.cmb_infracciones.DataSource = this.tipoInfracciones;
			this.setearCombo();
		}
		
		public List<Infraccion> ListaInfracciones {
			get { return this.infracciones; }
		}
		
		private List<String> tiposDeInfracciones() {
			this.tipoInfracciones = new List<String>();
			
			this.tipoInfracciones.Add("Grave");
			this.tipoInfracciones.Add("Leve");
			
			return tipoInfracciones;
		}
		
		private void setearCombo() {						
			if (this.cmb_infracciones.SelectedIndex == 0) {
				dtg_infracciones.DataSource = obtenerInfraccionesPorTipo("Grave");
			} else {
				dtg_infracciones.DataSource = obtenerInfraccionesPorTipo("Leve");
			}
		}
		
		private List<Infraccion> obtenerInfraccionesPorTipo(string tipo) {
			List<Infraccion> listado = new List<Infraccion>();
			
			foreach (Infraccion infra in this.infracciones) {
				if (infra.obtenerTipo().Equals(tipo)) {
					listado.Add(infra);
				}
			}
			
			return listado;
		}
		
		private void limpiarCampos() {
			txt_descripcion.Text = "";
			txt_importe.Text     = "";
		}
		
		private bool validarUnico(int codigo) {
			bool val = false;
			
			foreach(Infraccion infra in this.infracciones) {
				if (infra.Codigo == codigo) {
					val = true;
				}
			}
			
			return val;
		}
		
		void Button3Click(object sender, EventArgs e)
		{
			this.Close();
		}
		
		private void validarDatos() {
			if (txt_descripcion.Text.Length == 0) {
				throw new VacioException("Descripción");
			}			
			if (txt_importe.Text.Length == 0) {
				throw new VacioException("Importe");
			}						
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			try {
				this.validarDatos();
				Infraccion infraccion;
	
				string descripcion = txt_descripcion.Text;
				int importe        = int.Parse(txt_importe.Text);
				
				if (cmb_infracciones.SelectedIndex == 0) {
					infraccion = new InfraccionGrave(descripcion,importe);
				} else {
					infraccion = new InfraccionLeve(descripcion,importe);
				}
				
				infraccion.guardarInfraccion();
				this.limpiarCampos();
				this.Close();
			}
			catch (VacioException e1) {
				MessageBox.Show(e1.Message);
			}
		}
		
		void Cmb_infraccionesSelectionChangeCommitted(object sender, EventArgs e)
		{
			this.setearCombo();
		}
		
		void Txt_importeKeyPress(object sender, KeyPressEventArgs e)
		{
			if (((e.KeyChar) < 48 && e.KeyChar != 8) || e.KeyChar > 57 ){
			MessageBox.Show("Sólo se permiten Números");
			e.Handled = true;
			}        	        	        										
		}
		
		
		void Txt_codigoKeyPress(object sender, KeyPressEventArgs e)
		{
			if (((e.KeyChar) < 48 && e.KeyChar != 8) || e.KeyChar > 57 ){
			MessageBox.Show("Sólo se permiten Números");
			e.Handled = true;
			}        	        	        										
		}
		
		void Dtg_infraccionesDoubleClick(object sender, EventArgs e)
		{
			DataGridViewRow row = dtg_infracciones.CurrentRow;	
			
			if (row != null) {
				int id = (int)row.Cells[0].Value;
				
				ModificarInfraccion mi = new ModificarInfraccion(obtenerInfraccionPorId(id));
				mi.ShowDialog();	
				
				Infraccion inf = obtenerInfraccionPorId(id);
				inf = mi.Seleccionado;
				inf.modificarInfraccion();
			}

		}
		
		private Infraccion obtenerInfraccionPorId(int id) {
			Infraccion resultado = null;
			foreach (Infraccion inf in this.infracciones) {
				if (inf.Codigo.Equals(id)) {
					resultado = inf;
				}
			}
			
			return resultado;
		}
		
		void Cmb_infraccionesSelectedIndexChanged(object sender, EventArgs e)
		{
			
		}
	}
}
